package 中等.枚举;

/**
 * 给你两个字符串 s 和 t ，请你找出 s 中的非空子串的数目，这些子串满足替换
 * 一个不同字符 以后，是 t 串的子串。换言之，请你找到 s 和 t 串中 恰好 只
 * 有一个字符不同的子字符串对的数目。
 * 比方说， "computer" and "computation" 只有一个字符不同： 'e'/'a' ，所
 * 以这一对子字符串会给答案加 1 。
 * 请你返回满足上述条件的不同子字符串对数目。
 * 一个 子字符串 是一个字符串中连续的字符。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/count-substrings-that-differ-by-one-character
 */
public class 统计只差一个字符的子串数目_1638 {

    public static void main(String[] args) {

    }

    /**
     * 枚举起点和距离
     * 枚举 s 的起点 i 和 t 的起点 j，往后遍历字符，统计不同字符的的个数 diff,
     * 当 diff = 0 时，继续往后遍历，diff = 1 时，答案 + 1, diff > 1 时, 停止
     * 遍历
     */
    public int countSubstrings(String s, String t) {
        int cnt = 0;
        char[] sChars = s.toCharArray();
        char[] tChars = t.toCharArray();

        for (int i = 0; i < sChars.length; i++) {
            for (int j = 0; j < tChars.length; j++) {
                int diff = 0, i2 = i, j2 = j;
                while (diff <= 1 && i2 < sChars.length && j2 < tChars.length) {
                    if (sChars[i2] != tChars[j2]) {
                        diff++;
                    }
                    if (diff == 1) {
                        cnt++;
                    }
                    i2++;
                    j2++;
                }
            }
        }

        return cnt;
    }

}
